进程间通信最快速高效的办法是共享内存吗?

您所在的位置:网站首页 zeromq js 进程间通信最快速高效的办法是共享内存吗?

进程间通信最快速高效的办法是共享内存吗?

2023-03-17 16:43| 来源: 网络整理| 查看: 265

理论上应该是的,不过,你需要在进程间同步操作上花心思,这与多线程的同步有区别,需要核心对象(互斥器,信号量等)的介入。这些操作可能会影响性能,设计上与数据吞吐量等有关系。

另外,你还要注意,任何标准容器如 vector、string 等都不能直接放入共享内存,因为它们里面的指针指向的是本地地址空间中的位置,对于另一个进程来说都是野指针。所以你可能需要设计一套用于共享内存的容器(关键在于不能使用指针,要使用 offset,并保持紧凑)。boost 的 ipc 可供选择或参考,当然,还有其它一些现成的库。

如果你采用类似远程调用的通讯模型,即调用一个函数发送数据并等待返回结果,你还需要决策是否要支持 callback;也就是进程 A 调用进程 B 的函数 f 时,f 函数又调用进程 A 的 g 函数。这会增加同步机制的复杂程度。

其实,在大多数时候,你都可以选择使用 socket 来做进程间通讯。好处是一旦完成,你的程序不光能进程间通讯,还能跨机器、跨平台通讯。而最棒的一点是,socket 在本机上可以使用 loopback。经过我的测试,在大块数据上,其性能直逼内存拷贝速度的理论上限,这是非常令人振奋的。

MQ 等基于消息的通讯方式也是很好的选择呀,至于性能,只能通过测试用例来得到答案。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3